﻿/**
 * 
 */
package com.zc.ZCUtil;

import java.sql.*;


/**
 * @author ZhangCheng
 * 2019年9月16日
 * @coding UTF-8
 */
public class BasicMySqlDAO {
	
	private Connection con;
	private PreparedStatement ps;
	private ResultSet re;
	private String url ;
	private String user ;
	private String pwd ;
	
	/**
	 * 静态代码块加载数据库驱动 在创建对象前就建立好连接 
	 */
	
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("加载数据库驱动成功！");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 构造方法 加载数据库驱动 并设置默认数据库连接
	 */
	
	public BasicMySqlDAO() {
		this("jdbc:mysql://localhost:3306/moviejavadata?useSSL=false","root","zhangcheng");
	}
	
	/**
	 * 构造方法 加载数据库驱动 并设置默认数据库连接
	 */
	
	public BasicMySqlDAO(String url,String user,String pwd) {
		this.url = url;
		this.user = user;
		this.pwd = pwd;
	}
	
	/**
	 * 与数据库进行连接
	 */
	public void getCon() {
		try {
			this.con = DriverManager.getConnection(url, user, pwd);
			System.out.println("数据库连接成功！");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 用预编译查询获取信息
	 * @throws SQLException 
	 */
	public ResultSet getInfoFromDB(String sql) throws SQLException {
		return getInfoFromDB(sql, new Object[0]);
	}
	
	/**
	 * 通过数组传递参数
	 * @throws SQLException 
	 */
	public ResultSet getInfoFromDBByArray(String sql,Object[] obj) throws SQLException {
		return getInfoFromDB(sql, obj);
	}
	
	/**
	 * 通过可变参数传递参数
	 * @throws SQLException 
	 */
	public ResultSet getInfoFromDB(String sql,Object...obj) throws SQLException {
		getCon();//获得数据库连接
		this.ps = this.con.prepareStatement(sql);//获得预编译对象
		if(obj.length >0 ) {
			for(int i = 0; i < obj.length; i++) {
				this.ps.setObject(i+1, obj[i]);
			}
		}
		this.re = this.ps.executeQuery();//进行预编译查询
		return re;
	}
	
	/**
	 * 无参 进行DML查询
	 * @throws SQLException 
	 */
	public int updateDML(String sql) throws SQLException {
		return updateDML(sql, new Object[0]);
	}
	
	/**
	 * 通过数组传递参数 并进行DML操作
	 * @throws SQLException 
	 */
	public int updateDMLByArray(String sql,Object[] obj) throws SQLException {
		return updateDML(sql, obj);
	}
	
	/**
	 * 通过可变参数传递参数 并进行DML操作
	 * @throws SQLException 
	 */
	public int updateDML(String sql,Object...obj) throws SQLException {
		getCon();//获得数据库连接
		this.ps = this.con.prepareStatement(sql);//获得预编译对象
		if(obj.length >0 ) {
			for(int i = 0; i < obj.length; i++) {
				this.ps.setObject(i+1, obj[i]);
			}
		}
		int count = this.ps.executeUpdate();//进行预编译查询
		closeAll();
		return count;
	}
	public void closeAll() {
		try {
			if(this.re!=null) this.re.close();
			if(this.ps!=null) this.ps.close();
			if(this.con!=null) this.con.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
